package com.itjin.health.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.itjin.health.domain.dto.rehabilitation.RehabilitationPlanAddRequest;
import com.itjin.health.domain.dto.rehabilitation.RehabilitationPlanProgressUpdateRequest;
import com.itjin.health.domain.dto.rehabilitation.RehabilitationPlanUpdateRequest;
import com.itjin.health.domain.entity.RehabilitationPlan;
import com.itjin.health.domain.vo.RehabilitationPlanDetailVO;
import com.itjin.health.domain.vo.RehabilitationPlanVO;

import java.util.List;

public interface RehabilitationPlanService extends IService<RehabilitationPlan> {

  /**
   * 添加康复计划
   * 
   * @param rehabilitationPlanAddRequest 康复计划添加请求
   * @param therapistId                  理疗师ID
   * @return 康复计划ID
   */
  Integer addRehabilitationPlan(RehabilitationPlanAddRequest rehabilitationPlanAddRequest, Integer therapistId);

  /**
   * 更新康复计划
   * 
   * @param rehabilitationPlanUpdateRequest 康复计划更新请求
   * @param therapistId                     理疗师ID
   * @return 是否成功
   */
  Boolean updateRehabilitationPlan(RehabilitationPlanUpdateRequest rehabilitationPlanUpdateRequest,
      Integer therapistId);

  /**
   * 更新康复计划进度
   * 
   * @param progressUpdateRequest 进度更新请求
   * @param userId                用户ID
   * @return 是否成功
   */
  Boolean updateProgress(RehabilitationPlanProgressUpdateRequest progressUpdateRequest, Integer userId);

  /**
   * 通过ID获取康复计划详情
   * 
   * @param id 康复计划ID
   * @return 康复计划详情
   */
  RehabilitationPlanDetailVO getRehabilitationPlanDetailById(Integer id);

  /**
   * 分页获取理疗师创建的康复计划列表
   * 
   * @param therapistId 理疗师ID
   * @param page        页码
   * @param pageSize    每页大小
   * @param keyword     关键词
   * @param status      状态
   * @return 分页结果
   */
  Page<RehabilitationPlanVO> getRehabilitationPlanListByTherapist(Integer therapistId, Integer page, Integer pageSize,
      String keyword, Integer status);

  /**
   * 分页获取患者的康复计划列表
   * 
   * @param patientId 患者ID
   * @param page      页码
   * @param pageSize  每页大小
   * @param keyword   关键词
   * @param status    状态
   * @return 分页结果
   */
  Page<RehabilitationPlanVO> getRehabilitationPlanListByPatient(Integer patientId, Integer page, Integer pageSize,
      String keyword, Integer status);

  /**
   * 获取与伤病报告关联的康复计划
   * 
   * @param injuryReportId 伤病报告ID
   * @return 康复计划列表
   */
  List<RehabilitationPlanVO> getRehabilitationPlansByInjuryReportId(Integer injuryReportId);
}